CREATE EXTENSION pg_stat_statements;
用途:整理系統執行過的每一條SQL指令,可以透過SQL指令查詢插件紀錄的資訊,了解各種query的執行狀況
SELECT round((100 * total_time / sum(total_time)
OVER ())::numeric, 2) percent,
round(total_time::numeric, 2) AS total,
calls,
round(mean_time::numeric, 2) AS mean,
substring(query, 1, 200)
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
用途:可以查詢資料庫中每一支index的使用情形,像是被使用的次數,掃描的index筆數以及透過index scan回傳出來的行數量等等
用途:可以查看Postgres主機現在正在執行的每個backend process以及其資訊
這些資訊包括連線的使用者/IP/
當前交易開始的時間/
backend的狀態(正在執行工作/等待IO或是其他程序的鎖)
以及backend當前正在執行或是最後一個被執行的query內容等等...
用途:可以查看Postgres主機上面每個資料庫被使用的情形,例如上面已經被commit/中斷的交易數量,被讀取/插入/更新/刪除的tuple數量等等
用途:可以查看每個table的使用情形
其中包含sequential scan/index scan的次數以及這兩種操作讀出的行數
被插入/更新/刪除/HOT update的tuple數量
可見與不可見的資料行數,以及上次進行VACUUM的時間等
例子:找出有被做過大量sequential scan的table
SELECT schemaname, relname, seq_scan, seq_tup_read,
seq_tup_read / seq_scan AS avg, idx_scan
FROM pg_stat_user_tables
WHERE seq_scan > 0
ORDER BY seq_tup_read DESC LIMIT 25;